class RandomizedSet {
    Map<Integer, Integer> map;
    List<Integer> list;
    Random rnd;

    public RandomizedSet() {
        map = new HashMap<>();
        list = new ArrayList<>();
        rnd = new Random();
    }
    
    public boolean insert(int val) {
        boolean isPresent = map.containsKey(val);
        
        if(!isPresent) {
            list.add(val);
            map.put(val, list.size() - 1);
        }

        return !isPresent;
    }
    
    public boolean remove(int val) {
        boolean isPresent = map.containsKey(val);
        
        if(isPresent) {
            int lastVal = list.get(list.size() - 1);
            int valIdx = map.get(val);

            list.set(valIdx, lastVal);
            list.remove(list.size() - 1);

            map.put(lastVal, valIdx);
            map.remove(val);
        }


        return isPresent;
    }
    
    public int getRandom() {
        return list.get(rnd.nextInt(list.size()));
    }
}

/**
 * Your RandomizedSet object will be instantiated and called as such:
 * RandomizedSet obj = new RandomizedSet();
 * boolean param_1 = obj.insert(val);
 * boolean param_2 = obj.remove(val);
 * int param_3 = obj.getRandom();
 */